# 需求：将3个用户名和3个密码组合，生成所有可能的测试数据（共3×3=9种场景）
# 最终格式要求：元组列表 [(用户名1,密码1), (用户名2,密码2), ...]

# 定义测试数据：3个用户名、3个密码
user_list = ['test_user1', 'admin_001', 'guest_888']  # 用户名列表
pwd_list = ['Pwd@123', 'Test#456', 'Guest$789']       # 密码列表


# 方法1：用双层for循环组装测试数据
# 1. 定义空列表，用于存储最终的元组数据
final_data = []
# 2. 外层循环：遍历每个用户名
for user in user_list:
    # 3. 内层循环：遍历每个密码（每个用户名对应所有密码）
    for pwd in pwd_list:
        # 4. 将当前用户名和密码组成元组
        combo = (user, pwd)
        # 5. 将元组添加到空列表中
        final_data.append(combo)
# 6. 打印最终组装的测试数据
print("双层for循环组装结果：")
print(final_data)


# 方法2：用列表推导式（简洁写法）
# 列表推导式语法：[表达式 for 外层变量 in 外层可迭代对象 for 内层变量 in 内层可迭代对象]
# 作用：用一行代码实现双层循环的组装逻辑，效率与for循环一致
list_comprehension_data = [(user, pwd) for user in user_list for pwd in pwd_list]
# 打印列表推导式组装的结果
print("\n列表推导式组装结果：")
print(list_comprehension_data)


# 补充：列表推导式的其他应用场景
# 场景1：生成1~10的整数的立方，保存为列表
# 语法：[变量运算 for 变量 in 可迭代对象]
cube_list = [num**3 for num in range(1, 11)]
print("\n1~10的立方列表：")
print(cube_list)

# 场景2：生成1~20中能被3整除的数的平方，保存为列表
# 语法：[变量运算 for 变量 in 可迭代对象 if 条件判断]
div3_square_list = [num**2 for num in range(1, 21) if num % 3 == 0]
print("\n1~20中能被3整除的数的平方列表：")
print(div3_square_list)